home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 December / MACPOWER-1997-12.ISO.7z / MACPOWER-1997-12.ISO / AMUG / PROGRAMMING / Raven 1.2.sit / Raven 1.2 / Source / Foundation / Common / ZLockable.cpp < prev    next >
Text File  |  1997-05-17  |  3KB  |  118 lines

  1. /*
  2.  *  File:       ZLockable.h
  3.  *  Summary:    Mixin lockable objects.
  4.  *  Written by: Jesse Jones
  5.  *
  6.  *  Copyright ゥ 1996-1997 Jesse Jones. 
  7.  *    For conditions of distribution and use, see copyright notice in ZTypes.h  
  8.  *
  9.  *  Change History (most recent first):    
  10.  *
  11.  *         <2>     5/17/97    JDJ        Uses PRECONDITION and POSTCONDITION macros.
  12.  *         <1>     1/14/96    JDJ        Created.
  13.  */
  14.  
  15. #include <ZLockable.h>
  16.  
  17. #include <ZDebug.h>
  18.  
  19.  
  20. // ===================================================================================
  21. //    class MBaseLockable
  22. // ===================================================================================
  23.  
  24. //----------------------------------------------------------------
  25. //
  26. // MBaseLockable::~MBaseLockable
  27. //
  28. //----------------------------------------------------------------
  29. MBaseLockable::~MBaseLockable()
  30. {
  31. }
  32.  
  33.  
  34. //----------------------------------------------------------------
  35. //
  36. // MBaseLockable::MBaseLockable
  37. //
  38. //----------------------------------------------------------------
  39. MBaseLockable::MBaseLockable()
  40. {
  41. }
  42.  
  43. #pragma mark -
  44.  
  45. // ===================================================================================
  46. //    class MLockable
  47. // ===================================================================================
  48.  
  49. //----------------------------------------------------------------
  50. //
  51. // MLockable::~MLockable
  52. //
  53. //----------------------------------------------------------------
  54. MLockable::~MLockable()
  55. {
  56.     ASSERT(mLockCount == 0);        // Make sure calls to Lock are balanced by calls to Unlock.
  57. }
  58.  
  59.  
  60. //----------------------------------------------------------------
  61. //
  62. // MLockable::MLockable
  63. //
  64. //----------------------------------------------------------------
  65. MLockable::MLockable()
  66. {
  67.     mLockCount = 0;
  68. }
  69.  
  70.  
  71. //----------------------------------------------------------------
  72. //
  73. // MLockable::Lock
  74. //
  75. //----------------------------------------------------------------
  76. void MLockable::Lock(bool moveHigh)
  77. {
  78.     PRECONDITION(mLockCount >= 0);                            
  79.     
  80.     if (mLockCount == 0) 
  81.         this->OnLock(moveHigh);
  82.     
  83.     mLockCount++;
  84.                 
  85.     POSTCONDITION(mLockCount > 0);
  86. }        
  87.  
  88.  
  89. //----------------------------------------------------------------
  90. //
  91. // MLockable::Unlock
  92. //
  93. //----------------------------------------------------------------
  94. void MLockable::Unlock()
  95. {
  96.     PRECONDITION(mLockCount >= 1);                            // Check for Unlock without prior lock.
  97.     
  98.     if (mLockCount == 1) 
  99.         this->OnUnlock();
  100.     
  101.     mLockCount--;
  102.                 
  103.     POSTCONDITION(mLockCount >= 0);
  104. }    
  105.  
  106.  
  107. //----------------------------------------------------------------
  108. //
  109. // MLockable::IsLocked
  110. //
  111. //----------------------------------------------------------------
  112. bool MLockable::IsLocked() const
  113. {
  114.     return mLockCount > 0;
  115. }
  116.  
  117.  
  118.